package com.lczyfz.campusinfo.modules.user.utils;

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
//保存序列号json的时候，如果是null对象，key也会消失
public class ServerResponse<T> implements Serializable {
  private int status;
  private String msg;
  private T data;

  private ServerResponse(int status) {
      this.status = status;
  }

  private ServerResponse(int status, String msg) {
      this.status = status;
      this.msg = msg;
  }

  private ServerResponse(int status, T data) {
      this.status = status;
      this.data = data;
  }

  private ServerResponse(int status, String msg, T data) {
      this.status = status;
      this.msg = msg;
      this.data = data;
  }

  @JsonIgnore
  //使之不在json序列化结果当中
  public boolean isSuccess() {
      return this.status == ResponseCode.SUCCESS.getCode();
  }

  public int getStatus() {
      return this.status;
  }

  public String getMsg() {
      return this.msg;
  }

  public T getData() {
      return this.data;
  }

  public static <T> ServerResponse<T> createBySuccess() {
      return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
  }

  public static <T> ServerResponse<T> createBySuccessMessage(String msg) {
      return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg);
  }

  public static <T> ServerResponse<T> createBySuccess(T data) {
      return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), data);
  }

  public static <T> ServerResponse<T> createBySuccess(String msg, T data) {
      return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);
  }

  public static <T> ServerResponse<T> createByError() {
      return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
  }

  public static <T> ServerResponse<T> createByErrorMessage(String errorMessage) {
      return new ServerResponse<T>(ResponseCode.ERROR.getCode(), errorMessage);
  }

  public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode, String errorMessage) {
      return new ServerResponse<T>(errorCode, errorMessage);
  }
}